<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
<meta name="viewport" content="width=device-width">
<meta name="theme-color" content="#222">
<meta name="generator" content="Hexo 5.4.0">


  <link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon-next.png">
  <link rel="icon" type="image/png" sizes="32x32" href="/images/favicon-32x32-next.png">
  <link rel="icon" type="image/png" sizes="16x16" href="/images/favicon-16x16-next.png">
  <link rel="mask-icon" href="/images/logo.svg" color="#222">

<link rel="stylesheet" href="/css/main.css">



<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@5.15.4/css/all.min.css" integrity="sha256-mUZM63G8m73Mcidfrv5E+Y61y7a12O5mW4ezU3bxqW4=" crossorigin="anonymous">
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/animate.css@3.1.1/animate.min.css" integrity="sha256-PR7ttpcvz8qrF57fur/yAx1qXMFJeJFiA6pSzWi0OIE=" crossorigin="anonymous">

<script class="next-config" data-name="main" type="application/json">{"hostname":"example.com","root":"/","images":"/images","scheme":"Muse","darkmode":false,"version":"8.8.1","exturl":false,"sidebar":{"position":"left","display":"post","padding":18,"offset":12},"copycode":false,"bookmark":{"enable":false,"color":"#222","save":"auto"},"mediumzoom":false,"lazyload":false,"pangu":false,"comments":{"style":"tabs","active":null,"storage":true,"lazyload":false,"nav":null},"stickytabs":false,"motion":{"enable":true,"async":false,"transition":{"post_block":"fadeIn","post_header":"fadeInDown","post_body":"fadeInDown","coll_header":"fadeInLeft","sidebar":"fadeInUp"}},"prism":false,"i18n":{"placeholder":"搜索...","empty":"没有找到任何搜索结果：${query}","hits_time":"找到 ${hits} 个搜索结果（用时 ${time} 毫秒）","hits":"找到 ${hits} 个搜索结果"}}</script><script src="/js/config.js"></script>
<meta property="og:type" content="website">
<meta property="og:title" content="Maicss">
<meta property="og:url" content="http://example.com/index.html">
<meta property="og:site_name" content="Maicss">
<meta property="og:locale" content="zh_CN">
<meta property="article:author" content="Maicss">
<meta name="twitter:card" content="summary">


<link rel="canonical" href="http://example.com/">



<script class="next-config" data-name="page" type="application/json">{"sidebar":"","isHome":true,"isPost":false,"lang":"zh-CN","comments":"","permalink":"","path":"index.html","title":""}</script>

<script class="next-config" data-name="calendar" type="application/json">""</script>
<title>Maicss</title>
  




  <noscript>
    <link rel="stylesheet" href="/css/noscript.css">
  </noscript>
</head>

<body itemscope itemtype="http://schema.org/WebPage" class="use-motion">
  <div class="headband"></div>

  <main class="main">
    <header class="header" itemscope itemtype="http://schema.org/WPHeader">
      <div class="header-inner"><div class="site-brand-container">
  <div class="site-nav-toggle">
    <div class="toggle" aria-label="切换导航栏" role="button">
        <span class="toggle-line"></span>
        <span class="toggle-line"></span>
        <span class="toggle-line"></span>
    </div>
  </div>

  <div class="site-meta">

    <a href="/" class="brand" rel="start">
      <i class="logo-line"></i>
      <h1 class="site-title">Maicss</h1>
      <i class="logo-line"></i>
    </a>
  </div>

  <div class="site-nav-right">
    <div class="toggle popup-trigger">
    </div>
  </div>
</div>



<nav class="site-nav">
  <ul class="main-menu menu">
        <li class="menu-item menu-item-home"><a href="/" rel="section"><i class="fa fa-home fa-fw"></i>首页</a></li>
        <li class="menu-item menu-item-archives"><a href="/archives/" rel="section"><i class="fa fa-archive fa-fw"></i>归档</a></li>
  </ul>
</nav>




</div>
        
  
  <div class="toggle sidebar-toggle" role="button">
    <span class="toggle-line"></span>
    <span class="toggle-line"></span>
    <span class="toggle-line"></span>
  </div>

  <aside class="sidebar">

    <div class="sidebar-inner sidebar-overview-active">
      <ul class="sidebar-nav">
        <li class="sidebar-nav-toc">
          文章目录
        </li>
        <li class="sidebar-nav-overview">
          站点概览
        </li>
      </ul>

      <div class="sidebar-panel-container">
        <!--noindex-->
        <div class="post-toc-wrap sidebar-panel">
        </div>
        <!--/noindex-->

        <div class="site-overview-wrap sidebar-panel">
          <div class="site-author site-overview-item animated" itemprop="author" itemscope itemtype="http://schema.org/Person">
  <p class="site-author-name" itemprop="name">Maicss</p>
  <div class="site-description" itemprop="description"></div>
</div>
<div class="site-state-wrap site-overview-item animated">
  <nav class="site-state">
      <div class="site-state-item site-state-posts">
        <a href="/archives/">
          <span class="site-state-item-count">13</span>
          <span class="site-state-item-name">日志</span>
        </a>
      </div>
      <div class="site-state-item site-state-tags">
        <span class="site-state-item-count">15</span>
        <span class="site-state-item-name">标签</span>
      </div>
  </nav>
</div>



        </div>
      </div>
    </div>
  </aside>
  <div class="sidebar-dimmer"></div>


    </header>

    
  <div class="back-to-top" role="button" aria-label="返回顶部">
    <i class="fa fa-arrow-up"></i>
    <span>0%</span>
  </div>

<noscript>
  <div class="noscript-warning">Theme NexT works best with JavaScript enabled</div>
</noscript>


    <div class="main-inner index posts-expand">

    


<div class="post-block">
  
  

  <article itemscope itemtype="http://schema.org/Article" class="post-content" lang="">
    <link itemprop="mainEntityOfPage" href="http://example.com/2021/11/16/deepin-login-ui-size/">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="image" content="/images/avatar.gif">
      <meta itemprop="name" content="Maicss">
      <meta itemprop="description" content="">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="Maicss">
    </span>
      <header class="post-header">
        <h2 class="post-title" itemprop="name headline">
          <a href="/2021/11/16/deepin-login-ui-size/" class="post-title-link" itemprop="url">deepin虚拟机环境下修改登录界面的分辨率</a>
        </h2>

        <div class="post-meta-container">
          <div class="post-meta">
    <span class="post-meta-item">
      <span class="post-meta-item-icon">
        <i class="far fa-calendar"></i>
      </span>
      <span class="post-meta-item-text">发表于</span>
      

      <time title="创建时间：2021-11-16 15:52:37 / 修改时间：16:00:03" itemprop="dateCreated datePublished" datetime="2021-11-16T15:52:37+08:00">2021-11-16</time>
    </span>

  
</div>

        </div>
      </header>

    
    
    
    <div class="post-body" itemprop="articleBody">
          <p>今天论坛的朋友提出了这个问题，其实我很久之前也都注意到了，但是也没有去搞，今天有时间，写了一个简单粗暴的解决办法。</p>
<p>帖子地址：<a target="_blank" rel="noopener" href="https://bbs.deepin.org/zh/post/228077">https://bbs.deepin.org/zh/post/228077</a></p>
<h2 id="解决方案"><a href="#解决方案" class="headerlink" title="解决方案"></a>解决方案</h2><p>先确定理想的分辨率，我电脑是1920x1080</p>
<p>运行命令:</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">cvt 1920 1080</span><br></pre></td></tr></table></figure>

<p>将得到下面这条信息：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 1920x1080 59.96 Hz (CVT 2.07M9) hsync: 67.16 kHz; pclk: 173.00 MHz</span></span><br><span class="line">Modeline <span class="string">&quot;1920x1080_60.00&quot;</span>  173.00  1920 2048 2248 2576  1080 1083 1088 1120 -hsync +vsync</span><br></pre></td></tr></table></figure>

<p>然后编辑文件：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo vim /etc/deepin/greeters.d/00-xrandr</span><br></pre></td></tr></table></figure>

<p>在文件末尾添加如下三行：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># newmode后边的参数就是上边在运行cvt命令时结果中Modeline后边的内容</span></span><br><span class="line">xrandr --newmode <span class="string">&quot;1920x1080_60.00&quot;</span>  173.00  1920 2048 2248 2576  1080 1083 1088 1120 -hsync +vsync</span><br><span class="line"><span class="comment"># 下边两条命令中双引号中的内容和上边保持一致</span></span><br><span class="line">xrandr --addmode Virtual1 <span class="string">&quot;1920x1080_60.00&quot;</span></span><br><span class="line">xrandr --output Virtual1 --mode <span class="string">&quot;1920x1080_60.00&quot;</span></span><br></pre></td></tr></table></figure>

<p>重启应该就能看到效果了。</p>

      
    </div>

    
    
    

    <footer class="post-footer">
        <div class="post-eof"></div>
      
    </footer>
  </article>
</div>




    


<div class="post-block">
  
  

  <article itemscope itemtype="http://schema.org/Article" class="post-content" lang="">
    <link itemprop="mainEntityOfPage" href="http://example.com/2021/10/24/c-str-len/">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="image" content="/images/avatar.gif">
      <meta itemprop="name" content="Maicss">
      <meta itemprop="description" content="">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="Maicss">
    </span>
      <header class="post-header">
        <h2 class="post-title" itemprop="name headline">
          <a href="/2021/10/24/c-str-len/" class="post-title-link" itemprop="url">char**作为数组时如何获取其长度</a>
        </h2>

        <div class="post-meta-container">
          <div class="post-meta">
    <span class="post-meta-item">
      <span class="post-meta-item-icon">
        <i class="far fa-calendar"></i>
      </span>
      <span class="post-meta-item-text">发表于</span>

      <time title="创建时间：2021-10-24 11:22:14" itemprop="dateCreated datePublished" datetime="2021-10-24T11:22:14+08:00">2021-10-24</time>
    </span>
      <span class="post-meta-item">
        <span class="post-meta-item-icon">
          <i class="far fa-calendar-check"></i>
        </span>
        <span class="post-meta-item-text">更新于</span>
        <time title="修改时间：2021-11-16 15:49:25" itemprop="dateModified" datetime="2021-11-16T15:49:25+08:00">2021-11-16</time>
      </span>

  
</div>

        </div>
      </header>

    
    
    
    <div class="post-body" itemprop="articleBody">
          <h2 id="起因"><a href="#起因" class="headerlink" title="起因"></a>起因</h2><p>今天上午研究了一下字符串数组传参的问题，我希望在传参后能获取到数组长度。网上很多例子都是要附加一个参数用于传入长度。因此查了许多资料。</p>
<h2 id="解决办法"><a href="#解决办法" class="headerlink" title="解决办法"></a>解决办法</h2><p>首先要知道char**作为数组时有一特性，就是当访问数组越界是，不会中断程序抛出异常，而是得到一个NULL。</p>
<p>就比如说，char** a中存在两个元素的数组，当访问a[1]时，会的到最后一个元素的字符串，但当访问a[2]时，明显，数组已经越界了，不存在这个元素。此时若类型是char* a[]就会报错并中断程序，但是char**则不会，它会的到一个NULL，这时就可以利用这个特性来获取到数组的元素数了。</p>
<p>代码如下：</p>
<figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">len</span><span class="params">(<span class="keyword">char</span>** <span class="built_in">array</span>)</span></span>&#123;</span><br><span class="line">    <span class="keyword">int</span> size=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">char</span>* p = <span class="built_in">array</span>[<span class="number">0</span>];</span><br><span class="line">    <span class="keyword">while</span>(p)&#123;</span><br><span class="line">        size++;</span><br><span class="line">        p = <span class="built_in">array</span>[size];</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> size;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>

<p>非常感谢知乎网友@李林生。</p>

      
    </div>

    
    
    

    <footer class="post-footer">
        <div class="post-eof"></div>
      
    </footer>
  </article>
</div>




    


<div class="post-block">
  
  

  <article itemscope itemtype="http://schema.org/Article" class="post-content" lang="">
    <link itemprop="mainEntityOfPage" href="http://example.com/2021/10/23/install-linux-in-upan/">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="image" content="/images/avatar.gif">
      <meta itemprop="name" content="Maicss">
      <meta itemprop="description" content="">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="Maicss">
    </span>
      <header class="post-header">
        <h2 class="post-title" itemprop="name headline">
          <a href="/2021/10/23/install-linux-in-upan/" class="post-title-link" itemprop="url">在U盘中安装Linux操作系统</a>
        </h2>

        <div class="post-meta-container">
          <div class="post-meta">
    <span class="post-meta-item">
      <span class="post-meta-item-icon">
        <i class="far fa-calendar"></i>
      </span>
      <span class="post-meta-item-text">发表于</span>

      <time title="创建时间：2021-10-23 13:08:42" itemprop="dateCreated datePublished" datetime="2021-10-23T13:08:42+08:00">2021-10-23</time>
    </span>
      <span class="post-meta-item">
        <span class="post-meta-item-icon">
          <i class="far fa-calendar-check"></i>
        </span>
        <span class="post-meta-item-text">更新于</span>
        <time title="修改时间：2021-11-16 15:49:25" itemprop="dateModified" datetime="2021-11-16T15:49:25+08:00">2021-11-16</time>
      </span>

  
</div>

        </div>
      </header>

    
    
    
    <div class="post-body" itemprop="articleBody">
          <h2 id="起因"><a href="#起因" class="headerlink" title="起因"></a>起因</h2><p>最近在和人一起研究 apt-file 功能实现，但是我电脑中使用的系统是 fedora，所以需要一个Debian系的系统，手里恰好有一个当初女朋友送我的三星U盘，128G、USB3.0，性能应该差不多能满足需求，于是我决定在其中安装Ubuntu。</p>
<h2 id="大致思路"><a href="#大致思路" class="headerlink" title="大致思路"></a>大致思路</h2><h3 id="预备"><a href="#预备" class="headerlink" title="预备"></a>预备</h3><p>因为这个系统已经装好了，并且我不想再来一次，所以这里只说一下大致思路。</p>
<ul>
<li>U盘两个（一个大于4G（1号），另一个越大越好（2号））</li>
<li>系统镜像文件（我用了Ubuntu）</li>
<li>电脑一台</li>
</ul>
<h3 id="开始"><a href="#开始" class="headerlink" title="开始"></a>开始</h3><p>先把下载好的Ubuntu镜像写入到较小的U盘（1号）中，然后同时插入两个U盘，引导启动安装盘（1号）。</p>
<p>安装盘启动后，在分区的步骤中，可以看到电脑中的硬盘，还有2号U盘，还有用于启动的1号启动盘。</p>
<p>忽略硬盘，在2号U盘中创建EFI分区和其他对应分区。我这里只创建了一个EFI分区和根分区。</p>
<p>然后安装系统。</p>
<p>但是这时需要注意的是，此时电脑重启后将进入一个GRUB菜单，菜单中包含了你电脑中所有的操作系统的列表，这个列表中包括我在硬盘中的双系统Window和Fedora，也包括了U盘中的Ubuntu。</p>
<p>这时候，先进入Ubuntu，启动后需要有两个步骤：</p>
<ul>
<li>将引导重新安装至U盘的EFI分区中。</li>
<li>去除多余的GRUB菜单项。</li>
</ul>
<p>首先就是要将EFI分区重新挂载好，因为很有可能在启动时挂载了硬盘中的EFI分区，现在要将其卸载并挂载为U盘中的EFI分区。</p>
<p>然后卸载掉os-prober这个包，这个东西会在使用grub-mkconfig命令时，自动将可以扫描到的其他系统也添加到启动菜单，但是作为一个U盘中的系统，这显然是画蛇添足，因此，卸载掉可保证GRUB启动菜单的纯净。</p>
<p>最后使用grub-install安装，并使用grub-mkconfig更新配置即可，有些系统中是支持直接使用update-grub命令的，这个会更方便一点。</p>
<p>关于GRUB的操作，可以参考ArchWiki。</p>
<h3 id="结束"><a href="#结束" class="headerlink" title="结束"></a>结束</h3><p>到此为止，便可以在开机时进入bios的启动菜单，然后引导进入U盘中的操作系统了。</p>
<p>不过还要注意的是，这时候电脑原来的GRUB菜单可能已经变了，只需要在原来硬盘中的操作系统下使用grub-config命令更新配置文件即可。</p>
<p>如果原来电脑没有Linux，那么其实可以直接在Bios中把Windows启动项设置为首选就好啦。</p>

      
    </div>

    
    
    

    <footer class="post-footer">
        <div class="post-eof"></div>
      
    </footer>
  </article>
</div>




    


<div class="post-block">
  
  

  <article itemscope itemtype="http://schema.org/Article" class="post-content" lang="">
    <link itemprop="mainEntityOfPage" href="http://example.com/2021/09/27/fedora-nvidia/">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="image" content="/images/avatar.gif">
      <meta itemprop="name" content="Maicss">
      <meta itemprop="description" content="">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="Maicss">
    </span>
      <header class="post-header">
        <h2 class="post-title" itemprop="name headline">
          <a href="/2021/09/27/fedora-nvidia/" class="post-title-link" itemprop="url">fedora安装N卡驱动后导致触控板手势失效</a>
        </h2>

        <div class="post-meta-container">
          <div class="post-meta">
    <span class="post-meta-item">
      <span class="post-meta-item-icon">
        <i class="far fa-calendar"></i>
      </span>
      <span class="post-meta-item-text">发表于</span>

      <time title="创建时间：2021-09-27 21:19:37" itemprop="dateCreated datePublished" datetime="2021-09-27T21:19:37+08:00">2021-09-27</time>
    </span>
      <span class="post-meta-item">
        <span class="post-meta-item-icon">
          <i class="far fa-calendar-check"></i>
        </span>
        <span class="post-meta-item-text">更新于</span>
        <time title="修改时间：2021-11-16 15:49:25" itemprop="dateModified" datetime="2021-11-16T15:49:25+08:00">2021-11-16</time>
      </span>

  
</div>

        </div>
      </header>

    
    
    
    <div class="post-body" itemprop="articleBody">
          <p>安装NVIDIA官网下载的闭源驱动后，导致触控板手势失效，咨询了一些fedora的老用户后，发现原因在于fedora使用的的gnome使用了wayland作为默认的显示服务器。</p>
<p>因为众所周知的原因，N卡不支持wayland，这就因此，当N卡驱动安装并使用后，默认的显示服务器将被替换为X11，因而导致手势失效。</p>
<p>有一个并不完美的解决方案，安装<code>touchegg</code>来配置X11下的触控板手势，但是这个是使用快捷键触发的，因此并没有原生的手势用起来舒服。</p>
<p>所以，如果对触控板手势有较高要求，不推荐使用X11，不推荐N卡闭源驱动。</p>

      
    </div>

    
    
    

    <footer class="post-footer">
        <div class="post-eof"></div>
      
    </footer>
  </article>
</div>




    


<div class="post-block">
  
  

  <article itemscope itemtype="http://schema.org/Article" class="post-content" lang="">
    <link itemprop="mainEntityOfPage" href="http://example.com/2021/09/27/ftp-chinese/">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="image" content="/images/avatar.gif">
      <meta itemprop="name" content="Maicss">
      <meta itemprop="description" content="">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="Maicss">
    </span>
      <header class="post-header">
        <h2 class="post-title" itemprop="name headline">
          <a href="/2021/09/27/ftp-chinese/" class="post-title-link" itemprop="url">ftp在Linux下中文乱码</a>
        </h2>

        <div class="post-meta-container">
          <div class="post-meta">
    <span class="post-meta-item">
      <span class="post-meta-item-icon">
        <i class="far fa-calendar"></i>
      </span>
      <span class="post-meta-item-text">发表于</span>

      <time title="创建时间：2021-09-27 21:04:59" itemprop="dateCreated datePublished" datetime="2021-09-27T21:04:59+08:00">2021-09-27</time>
    </span>
      <span class="post-meta-item">
        <span class="post-meta-item-icon">
          <i class="far fa-calendar-check"></i>
        </span>
        <span class="post-meta-item-text">更新于</span>
        <time title="修改时间：2021-11-16 15:49:25" itemprop="dateModified" datetime="2021-11-16T15:49:25+08:00">2021-11-16</time>
      </span>

  
</div>

        </div>
      </header>

    
    
    
    <div class="post-body" itemprop="articleBody">
          <p>学校的ftp服务器应该是用Windows搭建的，在Linux下的登陆后，所有文件名的中文部分显示乱码，此方案用于解决这个问题。</p>
<h2 id="原因"><a href="#原因" class="headerlink" title="原因"></a>原因</h2><p>GB编码仍被广泛使用于Windows系统中，多数ftp服务器使用gb编码传输。而在以UTF-8为locale的linux系统中，lftp不能自动识别GB编码，故显示为乱码。遇到此问题时，需要通过命令告知lftp以gb编码读取数据。</p>
<h2 id="解决方法"><a href="#解决方法" class="headerlink" title="解决方法"></a>解决方法</h2><p>在lftp命令行中输入：</p>
<figure class="highlight sh"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">set</span> ftp:charset <span class="string">&quot;gbk&quot;</span></span><br><span class="line"><span class="built_in">set</span> file:charset <span class="string">&quot;utf-8&quot;</span></span><br></pre></td></tr></table></figure>

<p>即可，第一条命令表示服务器使用GBK编码，第二条表示本地使用UTF-8编码。</p>
<p>如果想设置GBK编码为lftp默认编码（会导致使用UTF-8编码的服务器乱码），可以编辑<code>~/.lftprc</code>或<code>/etc/lftp.conf</code>，在其末尾加入：</p>
<figure class="highlight sh"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">set</span> ftp:charset <span class="string">&quot;gbk&quot;</span>; <span class="built_in">set</span> file:charset <span class="string">&quot;utf-8&quot;</span></span><br></pre></td></tr></table></figure>

<blockquote>
<p>引用自：<a target="_blank" rel="noopener" href="http://linux-wiki.cn/wiki/zh-hans/%E8%A7%A3%E5%86%B3lftp%E4%B8%AD%E6%96%87%E4%B9%B1%E7%A0%81%E9%97%AE%E9%A2%98">http://linux-wiki.cn/</a></p>
</blockquote>

      
    </div>

    
    
    

    <footer class="post-footer">
        <div class="post-eof"></div>
      
    </footer>
  </article>
</div>




    


<div class="post-block">
  
  

  <article itemscope itemtype="http://schema.org/Article" class="post-content" lang="">
    <link itemprop="mainEntityOfPage" href="http://example.com/2021/09/09/fedora-fcitx5/">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="image" content="/images/avatar.gif">
      <meta itemprop="name" content="Maicss">
      <meta itemprop="description" content="">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="Maicss">
    </span>
      <header class="post-header">
        <h2 class="post-title" itemprop="name headline">
          <a href="/2021/09/09/fedora-fcitx5/" class="post-title-link" itemprop="url">在fedora34中安装fcitx5输入法替换ibus</a>
        </h2>

        <div class="post-meta-container">
          <div class="post-meta">
    <span class="post-meta-item">
      <span class="post-meta-item-icon">
        <i class="far fa-calendar"></i>
      </span>
      <span class="post-meta-item-text">发表于</span>

      <time title="创建时间：2021-09-09 10:58:26" itemprop="dateCreated datePublished" datetime="2021-09-09T10:58:26+08:00">2021-09-09</time>
    </span>
      <span class="post-meta-item">
        <span class="post-meta-item-icon">
          <i class="far fa-calendar-check"></i>
        </span>
        <span class="post-meta-item-text">更新于</span>
        <time title="修改时间：2021-11-16 15:49:25" itemprop="dateModified" datetime="2021-11-16T15:49:25+08:00">2021-11-16</time>
      </span>

  
</div>

        </div>
      </header>

    
    
    
    <div class="post-body" itemprop="articleBody">
          <p>fedora 默认是 gnome 桌面，使用了 ibus 输入法。但是尝试习惯 ibus 一段时间后，发现我还是习惯不了，打字候选字的排序很难受。没有找到更换 fcitx5 的教程，就自己研究一下。</p>
<p>首先安装 fcitx5 相关包：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo dnf install fcitx5 fcitx5-configtool</span><br></pre></td></tr></table></figure>

<p>再安装中文输入法套件：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo dnf install fcitx5-chinese-addons</span><br></pre></td></tr></table></figure>

<p>配置环境变量：</p>
<p>编辑<code>~/.bashrc</code>，在文件末尾加入以下内容：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">export</span> GTK_IM_MODULE=fcitx</span><br><span class="line"><span class="built_in">export</span> QT_IM_MODULE=fcitx</span><br><span class="line"><span class="built_in">export</span> XMODIFIERS=\@im=fcitx</span><br><span class="line"><span class="built_in">export</span> SDL_IM_MODULE=fcitx</span><br></pre></td></tr></table></figure>

<p>然后使之生效：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">source</span> ~/.bashrc</span><br></pre></td></tr></table></figure>

<p>最后设置fcitx5开机自启动：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ln -s /usr/share/applications/org.fcitx.Fcitx5.desktop ~/.config/autostart/</span><br></pre></td></tr></table></figure>

<p>完成！</p>
<p>一些特别说明：</p>
<ul>
<li>在这里不能卸载 ibus，原因是会要求同时卸载 gnome-shell，这是系统桌面的重要组件，因此不能卸载。</li>
<li>fcitx5 运行时会 ibus 会自动退出，因此可以无视它。</li>
<li>若需要输入法皮肤可以使用这个，也是由我倾情奉献：<a target="_blank" rel="noopener" href="https://bbs.deepin.org/zh/post/223743">深度科技论坛</a></li>
</ul>

      
    </div>

    
    
    

    <footer class="post-footer">
        <div class="post-eof"></div>
      
    </footer>
  </article>
</div>




    


<div class="post-block">
  
  

  <article itemscope itemtype="http://schema.org/Article" class="post-content" lang="">
    <link itemprop="mainEntityOfPage" href="http://example.com/2021/09/07/gcc-chang-different/">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="image" content="/images/avatar.gif">
      <meta itemprop="name" content="Maicss">
      <meta itemprop="description" content="">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="Maicss">
    </span>
      <header class="post-header">
        <h2 class="post-title" itemprop="name headline">
          <a href="/2021/09/07/gcc-chang-different/" class="post-title-link" itemprop="url">g++和chang编译程序出现不同结果分析</a>
        </h2>

        <div class="post-meta-container">
          <div class="post-meta">
    <span class="post-meta-item">
      <span class="post-meta-item-icon">
        <i class="far fa-calendar"></i>
      </span>
      <span class="post-meta-item-text">发表于</span>

      <time title="创建时间：2021-09-07 09:38:03" itemprop="dateCreated datePublished" datetime="2021-09-07T09:38:03+08:00">2021-09-07</time>
    </span>
      <span class="post-meta-item">
        <span class="post-meta-item-icon">
          <i class="far fa-calendar-check"></i>
        </span>
        <span class="post-meta-item-text">更新于</span>
        <time title="修改时间：2021-11-16 15:49:25" itemprop="dateModified" datetime="2021-11-16T15:49:25+08:00">2021-11-16</time>
      </span>

  
</div>

        </div>
      </header>

    
    
    
    <div class="post-body" itemprop="articleBody">
          <p>昨晚正在进行伟大的学术讨论。我提了这么一个问题：</p>
<figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">a=<span class="number">2</span>;</span><br><span class="line">b=++a+a++;</span><br><span class="line">cout&lt;&lt;b;</span><br></pre></td></tr></table></figure>

<p>问此时 b 应该输出多少？</p>
<p>按照正常的思维，计算的流程应当是这样的：a 先加一，此时 a=3，然后 a 再加 a，赋值给 b，b=6，最后 a 再加一，a=4。</p>
<p>我觉得我算的没错，但是当我想要确认一下的时候，诡异的事情来了，计算结果为7。我又让他们用电脑算了一下，结果是6。相同的代码运行出了不同的结果，一般来说就是不同的编译器的实现不同了。当我把编译器从 gcc 换成 chang 后，结果就变成了6。因此，我想看看这两个编译器分别是怎么理解这种代码的。</p>
<p>首先对我认为结果正常的 chang 编译器编译的结果进行分析。</p>
<p>截取这一段的汇编代码：</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line"># int a=2;</span><br><span class="line"># 将2赋给a，这里-0x8(%rbp)可以理解为变量a</span><br><span class="line">movl   $0x2,-0x8(%rbp) </span><br><span class="line"></span><br><span class="line"># int b=++a+a++;</span><br><span class="line"># 将变量a的值赋给寄存器eax</span><br><span class="line">mov    -0x8(%rbp),%eax</span><br><span class="line"># 将寄存器eax中的值加一</span><br><span class="line">add    $0x1,%eax</span><br><span class="line"># 将加一后的值重新赋给a</span><br><span class="line">mov    %eax,-0x8(%rbp)</span><br><span class="line"># 再将a的值赋给寄存器ecx</span><br><span class="line">mov    -0x8(%rbp),%ecx</span><br><span class="line"># 将ecx的值转移到edx</span><br><span class="line">mov    %ecx,%edx</span><br><span class="line"># 将edx加一</span><br><span class="line">add    $0x1,%edx</span><br><span class="line"># 将edx的值赋给a</span><br><span class="line">mov    %edx,-0x8(%rbp)</span><br><span class="line"># 将ecx和eax的值相加赋给eax</span><br><span class="line">add    %ecx,%eax</span><br><span class="line"># 将eax的值赋给b</span><br><span class="line">mov    %eax,-0xc(%rbp)</span><br></pre></td></tr></table></figure>

<p>可以看出，其实这段逻辑和我们计算的逻辑差不多。再来对比一下 gcc 是怎么实现的：</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"># int a=2;</span><br><span class="line"># 将2赋给a</span><br><span class="line">movl   $0x2,-0x4(%rbp)</span><br><span class="line"></span><br><span class="line"># int b=++a+a++;</span><br><span class="line"># 将a加一</span><br><span class="line">addl   $0x1,-0x4(%rbp)</span><br><span class="line"># 将加一后的a存储到寄存器eax</span><br><span class="line">mov    -0x4(%rbp),%eax</span><br><span class="line"># 将a的值+1再存储到edx中</span><br><span class="line">lea    0x1(%rax),%edx</span><br><span class="line"># 将edx中的值赋给a</span><br><span class="line">mov    %edx,-0x4(%rbp)</span><br><span class="line"># 将a的值赋给edx</span><br><span class="line">mov    -0x4(%rbp),%edx</span><br><span class="line"># 将edx和eax的值相加并存到eax中</span><br><span class="line">add    %edx,%eax</span><br><span class="line"># 将eax的值给b</span><br><span class="line">mov    %eax,-0x8(%rbp)</span><br></pre></td></tr></table></figure>

<p>这段代码说实话感觉非常奇怪。有点不符合我们正常的思维方式。</p>
<p>因此，还是推荐使用clang作为编译器编译。</p>

      
    </div>

    
    
    

    <footer class="post-footer">
        <div class="post-eof"></div>
      
    </footer>
  </article>
</div>




    


<div class="post-block">
  
  

  <article itemscope itemtype="http://schema.org/Article" class="post-content" lang="">
    <link itemprop="mainEntityOfPage" href="http://example.com/2021/09/03/ftp-server-config/">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="image" content="/images/avatar.gif">
      <meta itemprop="name" content="Maicss">
      <meta itemprop="description" content="">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="Maicss">
    </span>
      <header class="post-header">
        <h2 class="post-title" itemprop="name headline">
          <a href="/2021/09/03/ftp-server-config/" class="post-title-link" itemprop="url">vsftpd服务器配置详细中文说明</a>
        </h2>

        <div class="post-meta-container">
          <div class="post-meta">
    <span class="post-meta-item">
      <span class="post-meta-item-icon">
        <i class="far fa-calendar"></i>
      </span>
      <span class="post-meta-item-text">发表于</span>

      <time title="创建时间：2021-09-03 13:04:00" itemprop="dateCreated datePublished" datetime="2021-09-03T13:04:00+08:00">2021-09-03</time>
    </span>
      <span class="post-meta-item">
        <span class="post-meta-item-icon">
          <i class="far fa-calendar-check"></i>
        </span>
        <span class="post-meta-item-text">更新于</span>
        <time title="修改时间：2021-11-16 15:49:25" itemprop="dateModified" datetime="2021-11-16T15:49:25+08:00">2021-11-16</time>
      </span>

  
</div>

        </div>
      </header>

    
    
    
    <div class="post-body" itemprop="articleBody">
          <p>vsftpd作为一个主打安全的FTP服务器，有很多的选项设置。下面介绍了vsftpd的配置文件列表，而所有的配置都是基于vsftpd.conf这个配置文件的。本文将提供完整的vsftpd.conf的中文说明。学习本文的内容将有助于你初步了解vsftpd的配置文件，但针对具体情况还需要制定具体的配置方法。</p>
<h2 id="服务器相关文件"><a href="#服务器相关文件" class="headerlink" title="服务器相关文件"></a>服务器相关文件</h2><p>这介绍服务器中配置相关的文件。 </p>
<table>
<thead>
<tr>
<th>文件</th>
<th>说明</th>
</tr>
</thead>
<tbody><tr>
<td>/etc/vsftpd/vsftpd.conf</td>
<td>主配置文件</td>
</tr>
<tr>
<td>/usr/sbin/vsftpd</td>
<td>主程序可执行文件</td>
</tr>
<tr>
<td>/etc/rc.d/init.d/vsftpd</td>
<td>启动脚本</td>
</tr>
<tr>
<td>/etc/pam.d/vsftpd</td>
<td>PAM 认证文件（此文件中file=/etc/vsftpd/ftpusers字段，指明阻止访问的用户来自/etc/vsftpd/ftpusers文件中的用户）</td>
</tr>
<tr>
<td>/etc/vsftpd/ftpusers</td>
<td>禁止使用vsftpd 的用户列表文件。记录不允许访问FTP服务器的用户名单，管理员可以把一些对系统安全有威胁的用户账号记录在此文件中，以免用户从FTP登录后获得大于上传下载操作的权利，而对系统造成损坏。（注意： linux-4 中此文件在 /etc/ 目录下）</td>
</tr>
<tr>
<td>/etc/vsftpd/user_list</td>
<td>禁止或允许使用vsftpd 的用户列表文件。这个文件中指定的用户缺省情况（即在/etc/vsftpd/vsftpd.conf 中设置userlist_deny=YES ）下也不能访问FTP服务器，在设置了userlist_deny=NO 时,仅允许user_list 中指定的用户访问FTP 服务器。（注意： linux-4 中此文件在 /etc/ 目录下）</td>
</tr>
<tr>
<td>/var/ftp</td>
<td>匿名用户主目录；本地用户主目录为：/home/ 用户主目录 ，即登录后进入自己家目录</td>
</tr>
<tr>
<td>/var/ftp/pub</td>
<td>匿名用户的下载目录，此目录需赋权根chmod 1777 pub （1 为特殊权限，使上载后无法删除）</td>
</tr>
<tr>
<td>/etc/logrotate.d/vsftpd.log</td>
<td>Vsftpd 的日志文件</td>
</tr>
</tbody></table>
<h3 id="主配置文件说明"><a href="#主配置文件说明" class="headerlink" title="主配置文件说明"></a>主配置文件说明</h3><p>vsftpd 的主配置文件/etc/vsftpd/vsftpd.conf 说明( 修改前先备份) ： </p>
<figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 是否允许 匿名登录FTP服务器，默认设置为YES允许，即用户可使用用户名ftp或anonymous进行ftp登录，口令为用户的E-mail地址。如不允许匿名访问去掉前面#并设置为NO</span></span><br><span class="line"><span class="attr">anonymous_enable</span>=<span class="literal">YES</span></span><br><span class="line"></span><br><span class="line"><span class="comment">#  是否允许本地用户 ( 即 linux 系统中的用户帐号) 登录FTP服务器，默认设置为YES允许， 本地用户登录后会进入用户主目录，而匿名用户登录后进入匿名用户的下载目录/var/ftp/pub ；若只允许匿名用户访问，前面加上#，可阻止本地用户访问FTP服务器。）</span></span><br><span class="line"><span class="attr">local_enable</span>=<span class="literal">YES</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 是否允许本地用户对 FTP 服务器文件具有写权限 ， 默认设置为 YES 允许</span></span><br><span class="line"><span class="attr">write_enable</span>=<span class="literal">YES</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 设置本地用户的文件掩码 为缺省022 ，也可根据个人喜好将其设置为其他值，默认值为077</span></span><br><span class="line"><span class="attr">local_umask</span>=<span class="number">022</span></span><br><span class="line"></span><br><span class="line"><span class="comment">#  是否允许匿名用户上传文件 ， 须将 write_enable=YES ， 默认设置为 YES 允许。</span></span><br><span class="line"><span class="comment"># 另外需要创建一个可由FTP用户写入的目录。</span></span><br><span class="line"><span class="attr">anon_upload_enable</span>=<span class="literal">YES</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 是否允许匿名用户创建新文件夹 ， 默认设置为 YES 允许</span></span><br><span class="line"><span class="attr">anon_mkdir_write_enable</span>=<span class="literal">YES</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 是否激活目录欢迎信息功能，当用户用 CMD模式首次访问服务器上某个目录时，FTP服务器将显示欢迎信息，默认情况下，欢迎信息是通过该目录下的.message 文件获得的，此文件保存自定义的欢迎信息，由用户自己建立。</span></span><br><span class="line"><span class="attr">dirmessage_enable</span>=<span class="literal">YES</span></span><br><span class="line"></span><br><span class="line"><span class="comment">#  默认值为 NO 如果启用此选项，系统将会维护记录服务器上传和下载情况的日志文件，默认情况该日志文件为/var/log/vsftpd.log,也可以通过下面的 xferlog_file选项对其进行设定。</span></span><br><span class="line"><span class="attr">xferlog_enable</span>=<span class="literal">YES</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 设定 FTP 服务器将启用 FTP 数据端口的连接请求 ,ftp-data 数据传输 ，21 为连接控制端口</span></span><br><span class="line"><span class="attr">connect_from_port_20</span>=<span class="literal">YES</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 设定是否允许 改变 上传文件的属主，与下面一个设定项配合使用</span></span><br><span class="line"><span class="attr">chown_uploads</span>=<span class="literal">YES</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 设置想要改变的上传文件的属主，如果需要，则输入一个系统用户名，例如可以把上传的文件都改成 root 属主。whoever：任何人</span></span><br><span class="line"><span class="attr">chown_username</span>=whoever</span><br><span class="line"></span><br><span class="line"><span class="comment"># 设定系统维护记录FTP服务器上传和下载情况的日志文件，/var/log/vsftpd.log是默认的，也可以另设其它</span></span><br><span class="line"><span class="attr">xferlog_file</span>=/var/log/vsftpd.log</span><br><span class="line"></span><br><span class="line"><span class="comment"># 如果启用此选项 ， 传输日志文件将以标准 xferlog 的格式书写，该格式的日志文件默认为/var/log/xferlog,也可以通过xferlog_file选项对其进行设定，默认值为NO</span></span><br><span class="line"><span class="attr">xferlog_std_format</span>=<span class="literal">YES</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 如果添加并启用此选项，将生成两个相似的日志文件，默认在/var/log/xferlog和/var/log/vsftpd.log目录下。前者是wu_ftpd类型的传输日志，可以利用标准日志工具对其进行分析；后者是vsftpd类型的日志</span></span><br><span class="line">dual_log_enable</span><br><span class="line"></span><br><span class="line"><span class="comment"># 如果添加并启用此选项，则原本应该输出到/var/log/vsftpd.log中的日志，将输出到系统日志中</span></span><br><span class="line">syslog_enable</span><br><span class="line"></span><br><span class="line"><span class="comment"># 设置数据传输中断间隔时间，此语句表示空闲的用户会话中断时间为600秒，即当数据传输结束后，用户连接FTP服务器的时间不应超过600秒，可以根据实际情况对该值进行修改</span></span><br><span class="line"><span class="attr">idle_session_timeout</span>=<span class="number">600</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 设置数据连接超时时间，该语句表示数据连接超时时间为 120 秒，可根据实际情况对其个修改 </span></span><br><span class="line"><span class="attr">data_connection_timeout</span>=<span class="number">120</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 运行 vsftpd 需要的非特权系统用户，默认是nobody</span></span><br><span class="line"><span class="attr">nopriv_user</span>=ftpsecure </span><br><span class="line"></span><br><span class="line"><span class="comment"># 启用此功能，服务器将识别异步ABOR请求。为了安全起见，不推荐使用（代码非同小可）。然而，不启用它，可能会使旧的FTP客户端感到困惑。</span></span><br><span class="line"><span class="attr">async_abor_enable</span>=<span class="literal">YES</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 大多数 FTP 服务器都选择用 ASCII 方式传输数据 ， YES表示用ASCII的方式上传和下载文件</span></span><br><span class="line"><span class="attr">ascii_upload_enable</span>=<span class="literal">YES</span> </span><br><span class="line"></span><br><span class="line"><span class="comment"># 用 ASCII 方式下载文件</span></span><br><span class="line"><span class="comment">#ascii_download_enable=YES</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 登录FTP服务器时显示的欢迎信息，可以修改=后的欢迎信息内容。另外如在需要设置更改目录欢迎信息的目录下创建名为 .message 的文件，并写入欢迎信息保存后，在进入到此目录会显示自定义欢迎信息</span></span><br><span class="line"><span class="attr">ftpd_banner</span>=Welcome to my FTP service. </span><br><span class="line"></span><br><span class="line"><span class="comment"># 可将某些特殊的 email address 抵挡住。如果以anonymous登录服务器时，会要求输入密码，也就是您的email address,如果很讨厌某些email address，就可以使用此设定来取消他的登录权限，但必须与下面的设置项配合</span></span><br><span class="line"><span class="attr">deny_email_enable</span>=<span class="literal">YES</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 当上面的 deny_email_enable=YES 时，可以利用这个设定项来规定那个email address不可登录vsftpd服务器，此文件需用户自己创建，一行一个email address即可！</span></span><br><span class="line"><span class="attr">banned_email_file</span>=/etc/vsftpd/banned_emails</span><br><span class="line"></span><br><span class="line"><span class="comment"># 设置为 NO 时，用户登录FTP服务器后具有访问自己目录以外的其他文件的权限， 设置为 YES 时 ， 用户被锁定在自己的 home 目录中，vsftpd将在下面 chroot_list_file选项值的位置寻找 chroot_list文件，此文件需用户建立,再将需锁定在自己home目录的用户列入其中，每行一个用户</span></span><br><span class="line"><span class="attr">chroot_list_enable</span>=<span class="literal">YES</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 此文件需自己建立 ， 被列入此文件的用户 ， 在登录后将不能切换到自己目录以外的其他目录 ， 由 FTP 服务器自动地 chrooted 到用户自己的home目录下，使得 chroot_list文件中的用户不能随意转到其他用户的FTP home目录下，从而有利于FTP服务器的安全管理和隐私保护</span></span><br><span class="line"><span class="attr">chroot_list_file</span>=/etc/vsftpd/chroot_list</span><br><span class="line"></span><br><span class="line"><span class="comment"># 是否允许递归查询 ， 大型站点的 FTP 服务器启用此项可以方便远程用户查询</span></span><br><span class="line"><span class="attr">ls_recurse_enable</span>=<span class="literal">YES</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 如果设置为 YES ， 则 vsftpd 将以独立模式运行，由vsftpd自己监听和处理连接请求</span></span><br><span class="line"><span class="attr">listen</span>=<span class="literal">YES</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 设定是否支持IPV6</span></span><br><span class="line"><span class="attr">listen_ipv6</span>=<span class="literal">YES</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 设置 PAM 外挂模块提供的认证服务所使用的配置文件名 ，即/etc/pam.d/vsftpd文件，此文件中file=/etc/vsftpd/ftpusers字段，说明了PAM模块能抵挡的帐号内容来自文件/etc/vsftpd/ftpusers中</span></span><br><span class="line"><span class="comment">#pam_service_name=vsftpd </span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 此选项默认值为NO ,此时ftpusers文件中的用户禁止登录FTP服务器；若此项设为YES，则 user_list文件中的用户允许登录   FTP服务器，而如果同时设置了 userlist_deny=YES ，则 user_list文件中的用户将不允许登录FTP服务器，甚至连输入密码提示信息都没有，直接被FTP服务器拒绝</span></span><br><span class="line"><span class="attr">userlist_enable</span>=<span class="literal">YES</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 此项默认为YES，设置是否阻扯user_list文件中的用户登录FTP服务器</span></span><br><span class="line"><span class="attr">userlist_deny</span>=<span class="literal">YES</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 表明服务器使用 tcp_wrappers 作为主机访问控制方式，tcp_wrappers可以实现linux系统中网络服务的基于主机地址的访问控制，在/etc目录中的hosts.allow和hosts.deny两个文件用于设置tcp_wrappers的访问控制，前者设置允许访问记录，后者设置拒绝访问记录。例如想限制某些主机对FTP服务器192.168.57.2的匿名访问，编缉/etc/hosts.allow 文件，如在下面增加两行命令：vsftpd:192.168.57.1ENY 和vsftpd:192.168.57.9ENY 表明限制IP为192.168.57.1/192.168.57.9主机访问IP为192.168.57.2的FTP服务器，此时FTP服务器虽可以PING通，但无法连接</span></span><br><span class="line"><span class="attr">tcp_wrappers</span>=<span class="literal">YES</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 在FTP服务器的管理中无论对本地用户还是匿名用户，对于FTP服务器资源的使用都需要进行控控制， 避免由于负担过大造成FTP服务器运行异常， 可以添加以下配置项对FTP客户机使用FTP服务器资源进行控制： </span></span><br><span class="line"><span class="comment"># 设置项用于设置FTP服务器所允许的最大客户端连接数，值为0时表示不限制。例如max_client=100表示FTP服务器的所有客户端最大连接数不超过100个。 </span></span><br><span class="line"><span class="attr">max_client</span>=<span class="number">100</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 设置项用于设置对于同一IP地址允许的最大客户端连接数，值为0时表示不限制。例如max_per_ip=5表示同一IP地址的FTP客户机与FTP服务器建立的最大连接数不超过5个。 </span></span><br><span class="line"><span class="attr">max_per_ip</span>=<span class="number">5</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 设置项用于设置本地用户的最大传输速率，单位为B/s，值为0时表示不限制。例如local_max_rate=500000表示FTP服务器的本地用户最大传输速率设置为500KB/s. </span></span><br><span class="line"><span class="attr">local_max_rate</span>=<span class="number">500000</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 设置项用于设置匿名用户的最大传输速率，单位为B/s,值为0表示不限制。例如ano_max_rate=200000，表示FTP服务器的匿名用户最大传输速率设置为200KB/s.</span></span><br><span class="line">ano <span class="attr">n_max_rate</span>=<span class="number">200000</span></span><br></pre></td></tr></table></figure>

<h2 id="用户访问控制"><a href="#用户访问控制" class="headerlink" title="用户访问控制"></a>用户访问控制</h2><p>vsftpd.user_list 文件需要与vsftpd.conf文件中的配置项结合来实现对于vsftpd.user_list文件中指定用户账号的访问控制： </p>
<ul>
<li><p>黑名单设置方案<br>当vsftpd.conf配置文件中包括以下设置时，vsftpd.user_list文件中的用户账号被禁止进行FTP登录： </p>
<figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">userlist_enable</span>=<span class="literal">YES</span> </span><br><span class="line"><span class="attr">userlist_deny</span>=<span class="literal">YES</span> </span><br></pre></td></tr></table></figure>

<p>userlist_enable设置项设置使用vsftpd.user_list文件，userlist_deny设置为YES表示vsftpd.user_list文件用于设置禁止的用户账号。 </p>
</li>
<li><p>白名单设置方案<br>当vsftpd.conf配置文件中包括以下设置时，只有vsftpd.user_list文件中的用户账号能够进行FTP登录： </p>
<figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">userlist_enable</span>=<span class="literal">YES</span> </span><br><span class="line"><span class="attr">userlist_deny</span>=<span class="literal">NO</span> </span><br></pre></td></tr></table></figure>

<p>userlist_enable设置项设置使用vsftpd.user_list文件，userlist _deny设置为NO表示vsftpd.usre_list文件用于设置只允许登录的用户账号，文件中未包括的用户账号被禁止FTP登录。 </p>
</li>
</ul>
<p>userlist_deny 和 userlist_enable 选项限制用户登录FTP 服务器 （使用userlist_deny 选项和user_list 文件一起能有效阻止root,apache,www 等系统用户登录FTP 服务器，从而保证FTP 服务器的分级安全性）： </p>
<table>
<thead>
<tr>
<th>配置项</th>
<th>ftpuser</th>
<th>user_list</th>
</tr>
</thead>
<tbody><tr>
<td>userlist_enable=YES</td>
<td>允许</td>
<td>允许</td>
</tr>
<tr>
<td>userlist_enable=NO</td>
<td>禁止</td>
<td>允许</td>
</tr>
<tr>
<td>userlist_deny=YES</td>
<td>禁止（登录时可以看到密码输入提示，但仍无法访问）</td>
<td>禁止</td>
</tr>
<tr>
<td>userlist_deny=NO</td>
<td>禁止</td>
<td>允许</td>
</tr>
<tr>
<td>userlist_enable=YES<br>userlist_deny=YES</td>
<td>禁止</td>
<td>禁止（登录时不会出现密码提示，直接被服务器拒绝）</td>
</tr>
<tr>
<td>userlist_enable=YES<br>userlist_deny=NO</td>
<td>禁止</td>
<td>允许</td>
</tr>
</tbody></table>
<h2 id="配置FTP服务器的虚拟用户"><a href="#配置FTP服务器的虚拟用户" class="headerlink" title="配置FTP服务器的虚拟用户"></a>配置FTP服务器的虚拟用户</h2><p>在vsftpd服务器中支持<strong>匿名用户</strong>，<strong>本地用户</strong>和<strong>虚拟用户</strong>3类用户账号，用途及区别如下： </p>
<ul>
<li><strong>匿名用户：</strong>是名为anonymous或ftp的FTP用户，匿名FTP用户登录后将FTP服务器中的/var/ftp作为FTP根目录。匿名用户通常用于提供公共文件的下载，如架设公共软件下载的FTP服务器，所有人都可以使用匿名用户进行软件下载。 </li>
<li><strong>本地用户：</strong>账号是FTP服务器中的系统用户账号，使用FTP本地用户账号登录FTP服务器后，登录目录为本地用户的宿主目录。本地FTP用户账号通常和Web服务器一起提供虚拟主机服务，作为网页虚拟主机更新网页的途径。 </li>
<li><strong>虚拟用户：</strong>账号是为了保证FTP服务器的安全性，由vsftpd服务器提供的非系统用户账号。虚拟用户FTP登录后将把指定的目录作为FTP根目录。虚拟用户与本地用户具有类似的功能，由于虚拟用户相对安全，因此正逐步替代本地用户账号。 </li>
</ul>
<p>由于虚拟用户账号具有较高的安全性，可以替代本地用户账号使用，下面是vsftpd虚拟用户账号设置的几个步骤：<br>以设置miket 和 john 两个虚拟用户帐号为例来配置vsftpd服务器 </p>
<ol>
<li><p><strong>建立虚拟用户口令库文件</strong><br>  建立虚拟用户的口令文件，文件中奇数行设置虚拟用户的用户名，偶数行设置用户的口令。例如，使用vi编辑器建立名为logins.txt的用户口令库文件，在文件中设置用户mike的口令为pwabcd,用户john 的口令是pw1234: </p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">vi logins.txt </span><br><span class="line">mike      ( 奇数行设置虚拟用户名) </span><br><span class="line">pwabcd   （偶数行设置用户口令） </span><br><span class="line">john </span><br><span class="line">pw1234 </span><br><span class="line">:wq(保存退出) </span><br></pre></td></tr></table></figure></li>
<li><p><strong>生成vsftpd 的认证文件</strong><br> 使用db_load 命令生成认证文件。“<code>-f</code>”命令选项设置的值是虚拟用户的口令库文件，即上面创建的logins.txt。命令的参数设置为需要生成的认证文件名如 vsftpd_login.db，该文件放置在目录/etc/vsftpd/下：</p>
 <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 生成认证文件</span></span><br><span class="line">db_load -T -t <span class="built_in">hash</span> –f logins.txt /etc/vsftpd_login.db </span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看文件类型</span></span><br><span class="line">file /etc/vsftpd/vsftpd_login.db</span><br><span class="line"></span><br><span class="line"><span class="comment"># 生成的认证文件的权限应设置为只对root用户可读可写，即600: </span></span><br><span class="line">chmod 600 /etc/vsftpd/vsftpd_login.db </span><br><span class="line"></span><br></pre></td></tr></table></figure>
</li>
<li><p><strong>建立虚拟用户所需的PAM配置文件</strong><br>在/etc/pam.d目录下建立vsftpd虚拟用户身份认证所需的PAM配置文件，名称是vsftpd.vu,内容为：  </p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login </span><br><span class="line">account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login </span><br></pre></td></tr></table></figure></li>
<li><p><strong>建立虚拟用户及要访问的目录并设置相应的权限</strong></p>
</li>
</ol>
<p>  建立vsftpd虚拟用户所需的系统用户账号，账号名为virtual ，指定用户的宿主目录是/home/ftpsite, 设置宿主目录的权限为700： </p>
  <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">useradd -d /home/ftpsite virtual </span><br><span class="line">chmod 700 /home/ftpsite</span><br></pre></td></tr></table></figure>

<ol start="5">
<li><strong>设置vsftpd.conf主配置文件</strong></li>
</ol>
<p>  在对vsftpd.conf配置文件进行修改之前，应先将原有的文件进行备份，以便出现配置错误时可进行恢复：</p>
  <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">cd</span> /etc/vsftpd</span><br><span class="line">cp vsftpd.conf vsftpd.conf.bak</span><br></pre></td></tr></table></figure>

<p>  在vsftpd.conf配置文件中添加虚拟用户的配置项，内容为： </p>
  <figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">guest_enable</span>=<span class="literal">YES</span> </span><br><span class="line"><span class="attr">guest_username</span>=virtual </span><br><span class="line"><span class="attr">pam_service_name</span>=vsftpd.vu</span><br></pre></td></tr></table></figure>

<ol start="6">
<li><strong>重新启动vsftpd服务程序</strong></li>
</ol>
<p>  在对vsftpd.conf配置文件进行了任何修改后都需要重新启动vsftpd服务，以便配置生效： </p>
  <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">systemctl restart vsftpd</span><br></pre></td></tr></table></figure>

<ol start="7">
<li><strong>测试vsftpd中的虚拟用户账号:mike 或 john</strong><br> 在测试前可以先在/home/ftpsite目录中建立测试文件，用于测试时进行下载，并设置该文件的属主和属组为virtual。</li>
</ol>
  <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">touch /home/ftpsite/afile</span><br><span class="line">chown virtual.virtual /home/ftpsite/afile</span><br></pre></td></tr></table></figure>

<p>  使用ftp命令登录vsftpd服务器，并使用已配置的虚拟用户帐号mike进行登录 </p>
  <figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">ftp localhost </span><br><span class="line">	name (localhost:root):mike </span><br><span class="line">	password:</span><br><span class="line"><span class="comment"># 在完成虚拟用户的FTP登录后，可使用get命令下载测试文件，测试文件会保存到用户的当前目录中。 </span></span><br><span class="line">ftp&gt;get afile</span><br></pre></td></tr></table></figure>

<ol start="8">
<li><strong>对不同的虚拟用户设置不同的权限</strong></li>
</ol>
<p>  vsftpd服务器中的虚拟用户可以灵活的针对不同的用户账号设置不同的用户权限，配置的步骤如下： </p>
<ol>
<li><p>设置主配置文件：</p>
<p>在vsftpd.conf配置文件中添加user_config_dir配置项，并设置用户配置文件的保存目录。</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">user_config_dir=/etc/vsftpd_user_conf</span><br></pre></td></tr></table></figure>

<p>在上面的配置实例中，设置在/etc/vsftpd_user_conf目录中保存虚拟用户的配置文件。</p>
</li>
<li><p>建立用户配置文件目录<br>使用mkdir命令建立虚拟用户配置文件的保存目录 </p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">mkdir /etc/vsftpd_user_conf</span><br></pre></td></tr></table></figure></li>
<li><p>为虚拟用户建立单独的配置文件</p>
<p>在/etc/vsftpd_user_conf/目录中可以为每个虚拟用户建立<strong>独立的配置文件</strong>，<strong>配置文件名称和用户名相同</strong>。例如：为用户mike建立配置文件mike ,并将anon_world_readable_only设置为NO，表示用户具有浏览和下载的权限 </p>
<figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># cat /etc/vsftpd_user_conf/mike </span></span><br><span class="line"><span class="attr">anon_world_readable_only</span>=<span class="literal">NO</span> </span><br><span class="line"></span><br><span class="line"><span class="comment"># 为用户john建立配置文件john，并设置该用户具有浏览，下载，上传，改名，删除文件，建立和删除的权限。 </span></span><br><span class="line"><span class="comment"># cat  john </span></span><br><span class="line"><span class="comment"># 表示用户可以浏览FTP目录和下载文件</span></span><br><span class="line"><span class="attr">anon_world_readable_only</span>=<span class="literal">NO</span></span><br><span class="line"><span class="comment"># 表示用户可以上传文件    </span></span><br><span class="line"><span class="attr">anon_upload_enable</span>=<span class="literal">YES</span>    </span><br><span class="line"><span class="comment"># 表示用户具有建立和删除目录的权利     </span></span><br><span class="line"><span class="attr">anon_mkdir_write_enable</span>=<span class="literal">YES</span></span><br><span class="line"><span class="comment"># 表示用户具有文件改名和删除文件的权限    </span></span><br><span class="line"><span class="attr">anon_other_write_enable</span>=<span class="literal">YES</span>  </span><br></pre></td></tr></table></figure></li>
</ol>
<p>  通过对以上配置项的组合设置，vsftpd可以为每个虚拟用户配置不同的FTP权限，用户配置文件中没有的配置项将按照vsftpd.conf配置文件中的内容设置。 </p>
<h2 id="其它主要设置"><a href="#其它主要设置" class="headerlink" title="其它主要设置"></a>其它主要设置</h2><ul>
<li><p>最大传输速率设置：</p>
<p>设置匿名用户的最大传输率为20Kbps,修改/etc/vsftpd/vsftpd.conf 添加语句：anon_max_rate=20000<br>设置本地帐号最大传输率为1Mbps，修改/etc/vsftpd/vsftpd.conf 添加语句：local_max_rate=1000000 </p>
</li>
<li><p>服务器最大并发数和用户最大线程数设置：<br>例如设置服务器允许的最大并发数为99，而每个用户同一时段的最大并发线程数为5，修改/etc/vsftpd/vsftpd.conf 添加两行语句：max_clients=99 和 max_per_ip=5 </p>
</li>
<li><p>修改默认端口：<br>默认FTP服务器端口号是21，出于安全目的，有时需修改默认端口号，修改/etc/vsftpd/vsftpd.conf<br>添加语句(例)：listen_port=4449 该语句指定了修改后FTP服务器的端口号，应尽量大于4000，修改后访问 </p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 需加上正确的端口号了，否则不能正常连接</span></span><br><span class="line">ftp 192.168.57.2 4449</span><br></pre></td></tr></table></figure></li>
<li><p>设置用户组，增强FTP服务器安全性： </p>
<p>举例：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 创建新目录</span></span><br><span class="line">mkdir /home/try</span><br><span class="line"><span class="comment"># 新建组</span></span><br><span class="line">groupadd try      </span><br><span class="line"><span class="comment"># 新建用户try1并指定家目录和属组</span></span><br><span class="line">useradd –g try –d /home/try try1 </span><br><span class="line"><span class="comment"># 新建用户try2并指定家目录和属组</span></span><br><span class="line">useradd –g try –d /home/try try2</span><br><span class="line"><span class="comment"># 新建用户try3并指定家目录和属组</span></span><br><span class="line">useradd –g try –d /home/try try3</span><br><span class="line"><span class="comment"># 为新用户设密码</span></span><br><span class="line">passwd try1</span><br><span class="line"><span class="comment"># 为新用户设密码</span></span><br><span class="line">passwd try2</span><br><span class="line"><span class="comment"># 为新用户设密码</span></span><br><span class="line">passwd try3</span><br><span class="line"><span class="comment"># 设置目录属主为用户try1</span></span><br><span class="line">chown try1 /home/try</span><br><span class="line"><span class="comment"># 设置目录属组为组try</span></span><br><span class="line">chown .try /home/try</span><br><span class="line"><span class="comment"># 设置目录访问权限try1为读，写，执行；try2，try3为读</span></span><br><span class="line">chmod 750 /home/try   </span><br></pre></td></tr></table></figure>

<p>由于本地用户登录FTP服务器后进入自己主目录，而try1,try2 try3对主目录/home/try分配的权限不同，所以通过FTP访问的权限也不同，try1访问权限为：上传，下载，建目录 ;try2ty3访问权限为下载，浏览，不能建目录和上传。实现了群组中用户不同访问级别，加强了对FTP服务器的分级安全管理。 </p>
</li>
<li><p>常见的vsftpd日志解决方案如下： </p>
  <figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 表明FTP服务器记录上传下载的情况</span></span><br><span class="line"><span class="attr">xferlog_enable</span>=<span class="literal">YES</span></span><br><span class="line"><span class="attr">xferlog_std_format</span>=<span class="literal">YES</span></span><br><span class="line"><span class="comment"># 表明将记录的上传下载情况写在xferlog_file所指定的文件中，即xferlog_file选项指定的/var/log/xferlog文件中</span></span><br><span class="line"><span class="attr">xferlog_file</span>=/var/log/xferlog </span><br><span class="line"><span class="comment"># 表明启用了双份日志，在用xferlog文件记录服务器上传下载情况的同时，vsftpd_log_file所指定的文件，即/var/log/vsftpd.log也将用来记录服务器的传输情况</span></span><br><span class="line"><span class="attr">dual_log_enable</span>=<span class="literal">YES</span></span><br><span class="line"><span class="attr">vsftpd_log_file</span>=/var/log/vsftpd.log </span><br></pre></td></tr></table></figure></li>
<li><p>匿名FTP设置方法： </p>
<p>通常在登录FTP服务器的用户不确定的情况下，应将FTP服务器设置为允许匿名账号登录的FTP服务器 </p>
<ul>
<li><p>启用匿名帐号 </p>
<figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">anonymous_enable</span>=<span class="literal">YES</span> </span><br><span class="line"><span class="attr">local_enable</span>=<span class="literal">YES</span> </span><br><span class="line"><span class="attr">write_enable</span>=<span class="literal">YES</span> </span><br><span class="line"><span class="attr">listen</span>=<span class="literal">YES</span> </span><br></pre></td></tr></table></figure></li>
</ul>
<p>设置完成后，重启vsftd.将允许匿名账号和本地账号登录FTP服务器，同时允许匿名用户具有对FTP服务器文件的写权限，并且只能下载文件而不能上传，不允许匿名账号创建文件夹，匿名用户的口令为一个E-mail地址。 </p>
<ul>
<li><p>允许匿名账号上传文件 </p>
<figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">anon_upload_enable</span>=<span class="literal">YES</span> </span><br><span class="line"><span class="attr">anon_mkdir_write_enable</span>=<span class="literal">YES</span></span><br></pre></td></tr></table></figure>

<p>将#去掉即可，重启vsftpd.将允许匿名账号上传文件，也就是具有在FTP服务器的本地目录中新建文件和文件夹的功能 </p>
</li>
<li><p>仅允许匿名用户访问 </p>
<figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#local_enable=YES </span></span><br><span class="line"><span class="comment">#write_enable=YES </span></span><br></pre></td></tr></table></figure>


<p>在前面加上#，即限制本地账号访问，仅允许匿名用户访问。</p>
</li>
<li><p>禁止匿名访问，允许本地账号访问 </p>
<figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">anonymous_enable</span>=<span class="literal">NO</span> </span><br><span class="line"><span class="attr">local_enable</span>=<span class="literal">YES</span> </span><br><span class="line"><span class="attr">write_enable</span>=<span class="literal">YES</span> </span><br></pre></td></tr></table></figure></li>
</ul>
</li>
</ul>

      
    </div>

    
    
    

    <footer class="post-footer">
        <div class="post-eof"></div>
      
    </footer>
  </article>
</div>




    


<div class="post-block">
  
  

  <article itemscope itemtype="http://schema.org/Article" class="post-content" lang="">
    <link itemprop="mainEntityOfPage" href="http://example.com/2021/09/03/git-no-passwd/">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="image" content="/images/avatar.gif">
      <meta itemprop="name" content="Maicss">
      <meta itemprop="description" content="">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="Maicss">
    </span>
      <header class="post-header">
        <h2 class="post-title" itemprop="name headline">
          <a href="/2021/09/03/git-no-passwd/" class="post-title-link" itemprop="url">git取消push需要输入密码的步骤</a>
        </h2>

        <div class="post-meta-container">
          <div class="post-meta">
    <span class="post-meta-item">
      <span class="post-meta-item-icon">
        <i class="far fa-calendar"></i>
      </span>
      <span class="post-meta-item-text">发表于</span>

      <time title="创建时间：2021-09-03 10:35:43" itemprop="dateCreated datePublished" datetime="2021-09-03T10:35:43+08:00">2021-09-03</time>
    </span>
      <span class="post-meta-item">
        <span class="post-meta-item-icon">
          <i class="far fa-calendar-check"></i>
        </span>
        <span class="post-meta-item-text">更新于</span>
        <time title="修改时间：2021-11-16 15:49:25" itemprop="dateModified" datetime="2021-11-16T15:49:25+08:00">2021-11-16</time>
      </span>

  
</div>

        </div>
      </header>

    
    
    
    <div class="post-body" itemprop="articleBody">
          <p>git每次在push的时候都会要求输入用户名和密码，其实可以使用一个命令来关闭这个输入密码的步骤：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git config --global credential.helper store</span><br></pre></td></tr></table></figure>

<p>此后在<code>~/.gitconfig</code>文件中会新增以下内容：</p>
<figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="section">[credential]</span></span><br><span class="line">	<span class="attr">helper</span> = store</span><br></pre></td></tr></table></figure>

<p>现在push的话就不会要求输入用户名和密码了。</p>

      
    </div>

    
    
    

    <footer class="post-footer">
        <div class="post-eof"></div>
      
    </footer>
  </article>
</div>




    


<div class="post-block">
  
  

  <article itemscope itemtype="http://schema.org/Article" class="post-content" lang="">
    <link itemprop="mainEntityOfPage" href="http://example.com/2021/09/02/myself/">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="image" content="/images/avatar.gif">
      <meta itemprop="name" content="Maicss">
      <meta itemprop="description" content="">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="Maicss">
    </span>
      <header class="post-header">
        <h2 class="post-title" itemprop="name headline">
          <a href="/2021/09/02/myself/" class="post-title-link" itemprop="url">自述</a>
        </h2>

        <div class="post-meta-container">
          <div class="post-meta">
    <span class="post-meta-item">
      <span class="post-meta-item-icon">
        <i class="far fa-calendar"></i>
      </span>
      <span class="post-meta-item-text">发表于</span>

      <time title="创建时间：2021-09-02 00:00:00" itemprop="dateCreated datePublished" datetime="2021-09-02T00:00:00+08:00">2021-09-02</time>
    </span>
      <span class="post-meta-item">
        <span class="post-meta-item-icon">
          <i class="far fa-calendar-check"></i>
        </span>
        <span class="post-meta-item-text">更新于</span>
        <time title="修改时间：2021-11-16 16:25:14" itemprop="dateModified" datetime="2021-11-16T16:25:14+08:00">2021-11-16</time>
      </span>

  
</div>

        </div>
      </header>

    
    
    
    <div class="post-body" itemprop="articleBody">
          <p>在写这篇自述之前，我是想写的文艺一点的，写的好看一点，让人一眼就能看出我是个读过很多书的人，但其实并没有读过很多。所以我就从网上搜索了一下“自述”，找到的大多数以“我，21岁，住在…”，因此打算自己完成此篇。按照正常的逻辑来说，这里应该介绍到我的性格爱好，我最近在做什么，以及我未来可能做什么，都是一些流水账。就算我写了，估计也少有人耐心去看，所以这里就简单写一些吧。</p>
<p>我目前是一个大学生，写博客的大多也都是大学生，因为只有这种人每天闲的没事干，总是想干一些偶尔能和其他同学吹吹牛比的事情。就比如把自己的个性签名改成自己博客的地址，然后期待着会有人跑过来问我：”你这个网址怎么弄得？我也想弄一个。“这种莫名其妙的自豪感会让我觉得你大学没闲着，会减少无所事事带来的罪恶感。但其实并没有人如想象的一样，把个性签名的网址复制到浏览器然后打开。如果你是这么过来的，可以发消息告诉我，让我知道除了我还有别人这么无聊。</p>
<p>当然不是说所有写博客的都是为了装逼，大多数还是以分享知识为主要动力的。</p>
<h2 id="为什么要在这个鸟不拉屎的地方写东西？"><a href="#为什么要在这个鸟不拉屎的地方写东西？" class="headerlink" title="为什么要在这个鸟不拉屎的地方写东西？"></a>为什么要在这个鸟不拉屎的地方写东西？</h2><p>这是第一次在gitee上搭建博客，以前都是在深度论坛或者博客园写一些技术类的文章，但是每篇文章的阅读量也只有几十几百，既然哪里都是没人看，还不如自己搭建一个，愿意写什么写什么，不会再局限于技术类的，也不需要经过审核，可以放飞自我了，在这里说什么虎狼之词都没人管，甚至都没有多少人看见。只要我坚定不移的拥护党，拥护人民。</p>
<p>近期打算把博客园的文章搬到这里来，以后就在这里更新了。博客园那个黑不溜秋的主题也是我自己写CSS写出来的，当时觉得高大上，现在觉得丑的一批，我也没啥艺术细胞，所以自己设计这种活我还真干不了。两年前深度的舒乐大佬邀请我去他手下实习，当时答应的挺痛快，后来发现自己实在是不行，最后去了运营岗位实习了一个月。</p>
<h2 id="你可能还好奇一些其他问题"><a href="#你可能还好奇一些其他问题" class="headerlink" title="你可能还好奇一些其他问题"></a>你可能还好奇一些其他问题</h2><blockquote>
<p>Q：既然是你的个人博客，为什么不放一张照片？是因为丑吗？</p>
<p>A：是。</p>
</blockquote>
<blockquote>
<p>Q：你能写出什么牛逼的东西吗？</p>
<p>A：不能。</p>
</blockquote>
<blockquote>
<p>Q：这种网页我也能搞一个吗？</p>
<p>A：当然可以，我会尽量写一个大家都能看得懂的教程。</p>
</blockquote>

      
    </div>

    
    
    

    <footer class="post-footer">
        <div class="post-eof"></div>
      
    </footer>
  </article>
</div>




  <nav class="pagination">
    <span class="page-number current">1</span><a class="page-number" href="/page/2/">2</a><a class="extend next" rel="next" href="/page/2/"><i class="fa fa-angle-right" aria-label="下一页"></i></a>
  </nav>

</div>
  </main>

  <footer class="footer">
    <div class="footer-inner">


<div class="copyright">
  &copy; 
  <span itemprop="copyrightYear">2021</span>
  <span class="with-love">
    <i class="fa fa-heart"></i>
  </span>
  <span class="author" itemprop="copyrightHolder">Maicss</span>
</div>
  <div class="powered-by">由 <a href="https://hexo.io/" rel="noopener" target="_blank">Hexo</a> & <a href="https://theme-next.js.org/muse/" rel="noopener" target="_blank">NexT.Muse</a> 强力驱动
  </div>

    </div>
  </footer>

  
  <script src="https://cdn.jsdelivr.net/npm/animejs@3.2.1/lib/anime.min.js" integrity="sha256-XL2inqUJaslATFnHdJOi9GfQ60on8Wx1C2H8DYiN1xY=" crossorigin="anonymous"></script>
<script src="/js/comments.js"></script><script src="/js/utils.js"></script><script src="/js/motion.js"></script><script src="/js/schemes/muse.js"></script><script src="/js/next-boot.js"></script>

  





  





</body>
</html>
